diff options
Diffstat (limited to 'app/[lng]')
| -rw-r--r-- | app/[lng]/partners/(partners)/sales-force-test/AF_poc.html | 118 | ||||
| -rw-r--r-- | app/[lng]/partners/(partners)/sales-force-test/page.tsx | 32 |
2 files changed, 150 insertions, 0 deletions
diff --git a/app/[lng]/partners/(partners)/sales-force-test/AF_poc.html b/app/[lng]/partners/(partners)/sales-force-test/AF_poc.html new file mode 100644 index 00000000..60e047ed --- /dev/null +++ b/app/[lng]/partners/(partners)/sales-force-test/AF_poc.html @@ -0,0 +1,118 @@ +<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Salesforce LWC Loader</title>
+</head>
+<body>
+ <script src="https://connect-flow-8014--ps.sandbox.lightning.force.com/lightning/lightning.out.js"></script>
+ <script>
+ const myApiUrl = 'https://pyheroku-d21d18e4f257.herokuapp.com/api/getToken';
+
+ const salesforceUrl = 'https://connect-flow-8014--ps.sandbox.lightning.force.com/';
+ const appName = 'c:zzChatBot_Aura';
+ const componentName = 'c:sj_Chatbot';
+
+ const lwcAttributes = {
+ isDarkMode: false,
+ chatbot_width: '350px',
+ chatbot_height: '600px'
+ };
+
+ // 에러 메시지를 화면에 표시하는 함수
+ function displayError(message) {
+ const errorDiv = document.getElementById('errorMessage');
+ errorDiv.textContent = message;
+ errorDiv.style.display = 'block';
+ }
+
+ const salesforceApiUrl = 'https://connect-flow-8014--ps.sandbox.my.salesforce.com/services/apexrest/summarizeChat/';
+
+ const chatData = {
+ chatlog: `[
+ {
+ "sender": "SHI",
+ "message": "최근 입고된 발전기 제어반 견적서에서 납기 조건 누락을 확인했습니다.
+ 계약 전 꼭 납기 포함한 수정본 제출 부탁드립니다.",
+ },
+ {
+ "sender": "Partner",
+ "message": "네, 누락 사항 확인 후 납기 조건 명시하여 오늘 중으로 재제출 하겠습니다.",
+ },
+ {
+ "sender": "SHI",
+ "message": "감사합니다. 납기 조건은 계약 핵심 조항입니다. 반드시 반영해 주세요.",
+ }
+ ]
+ `
+ };
+
+ // API를 호출하여 토큰을 가져오고 LWC를 로드하는 로직
+ async function getToken(){
+ let accessToken = '';
+ await fetch(myApiUrl, { method: 'POST' }) // 프록시 서버에 POST 요청을 보냅니다.
+ .then(response => {
+ if (!response.ok) {
+ return response.json().then(errorData => {
+ throw new Error(`백엔드 API 에러 (Status: ${response.status}): ${JSON.stringify(errorData)}`);
+ });
+ }
+ return response.json();
+ })
+ .then(data => {
+ accessToken = data.access_token;
+ if (!accessToken) {
+ throw new Error("응답 데이터에 access_token이 없습니다.");
+ }
+
+ console.log("Heroku 프록시를 통해 안전하게 토큰을 받았습니다:", accessToken);
+ })
+ .catch(error => {
+ console.error('전체 프로세스 호출 실패:', error);
+ displayError(`오류가 발생했습니다: ${error.message}`);
+ });
+
+ return accessToken;
+ }
+
+ async function getChatSummary(accessToken){
+ console.log("토큰")
+ console.log(accessToken)
+ fetch(salesforceApiUrl, {
+ method: 'POST',
+ headers: {
+ // Bearer 뒤에 공백이 중요합니다.
+ 'Authorization': `Bearer ${accessToken}`,
+ 'Content-Type': 'application/json'
+ },
+ // JavaScript 객체를 JSON 문자열로 변환합니다.
+ body: JSON.stringify(chatData)
+ })
+ .then(response => {
+ if (!response.ok) {
+ // API 호출이 실패하면 에러를 발생시킵니다.
+ throw new Error(`Salesforce API 에러: ${response.status}`);
+ }
+ return response.json(); // 응답을 JSON 형태로 파싱합니다.
+ })
+ .then(result => {
+ // 성공적인 응답을 콘솔에 출력합니다.
+ console.log('Salesforce API 응답:', result);
+ })
+ .catch(error => {
+ // API 호출 중 발생한 에러를 처리합니다.
+ console.error('Salesforce API 호출 실패:', error);
+ displayError(`Salesforce API 호출 중 오류가 발생했습니다: ${error.message}`);
+ })
+ }
+
+ async function getMain(){
+ accessToken = await getToken();
+ await getChatSummary(accessToken);
+ }
+
+ getMain();
+ </script>
+</body>
+</html>
\ No newline at end of file diff --git a/app/[lng]/partners/(partners)/sales-force-test/page.tsx b/app/[lng]/partners/(partners)/sales-force-test/page.tsx new file mode 100644 index 00000000..8d6cbfbc --- /dev/null +++ b/app/[lng]/partners/(partners)/sales-force-test/page.tsx @@ -0,0 +1,32 @@ +import path from "path"; +import { promises as fs } from "fs"; + +type PageProps = { + params: { lng: string }; +}; + +export default async function Page({ params }: PageProps) { + const filePath = path.join( + process.cwd(), + "app", + "[lng]", + "partners", + "(partners)", + "sales-force-test", + "AF_poc.html" + ); + + const html = await fs.readFile(filePath, "utf8"); + + return ( + <div className="w-full h-[100vh]"> + <iframe + title="Salesforce LWC Test" + className="w-full h-full border-0" + srcDoc={html} + /> + </div> + ); +} + + |
